package com.superbytecode.cloud.safety.ratelimit;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * All rights Reserved, Designed By www.super-master.com
 *
 * @ProjectName: beacon-cloud
 * @Package: com.superbytecode.cloud.safety.ratelimit
 * @ClassName: RateLimit
 * @Description: [接口限流]
 * <p>支持IP、用户、自定义参数限流 </p>
 * @Author: [Lance Ting]
 * @Date: 2024/11/12 0:01
 * @Version: V1.0
 * @Copyright: 2024 www.super-master.com Inc. All rights reserved.
 * TODO: 注意,本文件Lance Ting所作,如果转载或使用请标明具体出处!
 **/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface RateLimit {
    /**
     * 限流类型 (必填)
     */
    RateLimitType type();

    /**
     * 限流目标参数  (type = RateLimitType 必填)
     * <p>
     * el表达式，如手机号码：“#user.phone”，如有多个参数，自行拼装
     */
    String spEl() default "";

    /**
     * 限流规则 (必填)
     * <p>
     * 格式：格式为: {"1/10s", "3/1m", "20/1h"}，时间目前支持： s : 秒, m: 分钟, h: 小时, d: 天
     * 限流规则由1个或多个规则组成， "m/n单位" ,  斜杠前面的数字1表示指定时间内能请求的次数，如："1/10s" 表示10秒周期内只能请求1次
     * <p>
     * 配置多个规则时，只要其中一个规则到达限定值，就会返回错误
     * </p>
     */
    String[] rules();

    /**
     * 错误信息
     */
    String handle() default "请求过于频繁，请稍后再试";
}